package twoThreeAnswer;

import twoThree.BiThreeNode;

/**
 * @program: practise
 * @description: 二叉树节点类及方法
 * @author: 兔子
 * @create: 2021-10-30 13:07
 **/

public class BiTreeNode {
    public Object data;
    public BiTreeNode lchild,rchild;

    /**
     * 构造一个空的节点
     */
    public BiTreeNode() {
    }

    /**
     * 构造一个左右孩子域为空的二叉树
     * @param data
     * @param lchild
     * @param rchild
     */
    public BiTreeNode(Object data, BiTreeNode lchild, BiTreeNode rchild) {
        this.data = data;
        this.lchild = lchild;
        this.rchild = rchild;
    }

    /**
     * 叶子节点
     * @param data
     */
    public BiTreeNode(Object data) {
        this(data,null,null);
    }

    /**
     * 先序遍历
     * @param T
     */
    public static void preRootTraverse(BiTreeNode T) {
        if(T != null) {
            if (!String.valueOf(T.data).equals("*")) {
                System.out.print(T.data+" ");
            }
            isRootTraverse(T.lchild);
            isRootTraverse(T.rchild);
        }
    }

    /**
     * 中序遍历
     * @param T
     */
    public static void isRootTraverse(BiTreeNode T) {
        if(T != null) {
            isRootTraverse(T.lchild);
            if (!String.valueOf(T.data).equals("*")) {
                System.out.print(T.data+" ");
            }
            isRootTraverse(T.rchild);
        }
    }

    /**
     * 后序遍历
     * @param T
     */
    public static void postRootTraverse(BiTreeNode T) {
        if(T != null) {
            isRootTraverse(T.lchild);
            isRootTraverse(T.rchild);
            if (!String.valueOf(T.data).equals("*")) {
                System.out.print(T.data+" ");
            }
        }
    }

    @Override
    public String toString() {
        return "BiTreeNode{" +
                "data=" + data +
                ", lchild=" + lchild +
                ", rchild=" + rchild +
                '}';
    }
}
